package com.redsoft.spirit.service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.redsoft.spirit.dao.PageElementRepository;
import com.redsoft.spirit.entity.PageElement;
import com.redsoft.spirit.util.BeanUtils;

/**
 * 页面元素管理service
 * 
 * <pre>
 * 页面元素管理service
 * </pre>
 * 
 * @author 杨雷
 * @date 2017.06.22
 * @since 1.0
 */
@Service
@Transactional
public class PageElementService {

	@Autowired
	private PageElementRepository pageElementRepository;

	/**
	 * 新增或者修改.
	 * 
	 * <pre>
	 * 新增或者修改
	 * </pre>
	 * 
	 * @author 杨雷
	 * @param codeTable
	 * @throws Exception
	 */
	public void save(PageElement element) throws Exception {
		if ("".equals(element.getId())) {
			pageElementRepository.save(element);
		} else {
			PageElement pageOld = pageElementRepository.findById(element.getId());
			BeanUtils.copyBeanNotNull2Bean(element, pageOld);
			pageElementRepository.save(pageOld);
		}
	}

	/**
	 * 删除指定id的元素.
	 * 
	 * <pre>
	 * 删除指定id的元素
	 * </pre>
	 * 
	 * @author 杨雷
	 * @param id
	 */
	public void deleteAllById(String id) {
		pageElementRepository.delete(id);
	}

	/**
	 * 查询所选页面下所有元素，可分页
	 * 
	 * <pre>
	 * 	查询所选页面下所有元素，可分页
	 * </pre>
	 * 
	 * @author 杨雷
	 * @param id
	 * @param offset
	 * @param limit
	 * @param searchKey
	 * @return
	 */
	public Map getJsonData(String id, int offset, int limit, String searchKey) {

		String sql = "SELECT pe.*, p.page_name pageName FROM sys_page_element pe, sys_page p WHERE pe.page_id=p.id AND p.id =:pageId";

		Map map = new HashMap<>();
		map.put("pageId", id);

		// 根据元素名称搜索
		if (searchKey != null && !"".equals(searchKey)) {
			map.put("searchKey", "%" + searchKey + "%");
			sql += " and pe.caption like :searchKey";
		}
		String countSql = "select count(0) from (" + sql + ") a";
		return pageElementRepository.sqlQuery(sql, countSql, map, offset, limit, "count", "rows");
	}

	/**
	 * 查询这个页面下所有的元素.
	 * 
	 * <pre>
	 * 查询这个页面下所有的元素
	 * </pre>
	 * 
	 * @author 杨雷
	 * @param pageId
	 * @return
	 */
	public List<PageElement> getElementByPage(String pageId) {
		return pageElementRepository.getByPageId(pageId);
	}
}
